#include <iostream>
using namespace std;
int a[50];
int f[50][50];
int root[50][50];

int dfs1(int l, int r)
{
    if(l>r) return 1;
    if(f[l][r]) return f[l][r];
    if(l==r)
    {
        f[l][r]=a[l];
        root[l][r]=l;
        return a[l];
    }

    int ans=0;

    for(int i=l;i<=r;i++)
    {
        int num=dfs1(l,i-1)*dfs1(i+1,r)+a[i];
        if(ans < num)
        {
            root[l][r]=i;
            ans=num;
        }
    }

    return f[l][r]=ans;
}
void dfs2(int l, int r)
{
    if(l>r) return ;
    
    int k=root[l][r];
    cout<<k<<' ';
    
    dfs2(l,k-1); dfs2(k+1,r);
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];

    int ans=dfs1(1,n);

    cout<<ans<<endl;

    dfs2(1,n);

    return 0;
}
